package com.example.piedrapapeltijeralagartospock;


import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class Juego2 extends Activity {
	// Variables de los objetos visuales
	private TextView nombreJugador1, nombreJugador2, visualizaPuntuacion1,	visualizaPuntuacion2, turno;
	private ImageView opcionJugador1, opcionJugador2;
	private ImageView piedra, papel, tijeras, lagarto, spock;

	// Variables logicas

	private Mano manoJugador1, manoJugador2;
	private int modoDeJuego, puntuacion1, puntuacion2;
	private String jugador1, jugador2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_juego);
		MyListener2 l= new MyListener2(this);
		
		//Captura de elementos informativos
		nombreJugador1 = (TextView)findViewById(R.id.jugador1);
		nombreJugador2  = (TextView)findViewById(R.id.jugador2);
		visualizaPuntuacion1  = (TextView)findViewById(R.id.puntuacion1);
		visualizaPuntuacion2  = (TextView)findViewById(R.id.puntuacion2);
		turno  = (TextView)findViewById(R.id.turno);
		
		//Captura de botones:	
		opcionJugador1 = (ImageView)findViewById(R.id.opcionJugador1);
		opcionJugador2 = (ImageView)findViewById(R.id.opcionJugador2);
		piedra = (ImageView)findViewById(R.id.piedra);
		papel = (ImageView)findViewById(R.id.papel);
		tijeras = (ImageView)findViewById(R.id.tijeras);
		lagarto = (ImageView)findViewById(R.id.lagarto);
		spock = (ImageView)findViewById(R.id.spock);
		
		//Colecta de datos recibidos y almacenamiento en variables
		Bundle bundle = getIntent().getExtras();
		modoDeJuego=bundle.getInt("ModoDeJuego");
		jugador1=bundle.getString("jugador1");
		jugador2=bundle.getString("jugador2");
		puntuacion1=bundle.getInt("puntuacion1");
		puntuacion2=bundle.getInt("puntuacion2");
		manoJugador1=Mano.setInt(bundle.getInt("manoJugador1"));
		
		//Muestra visual de los parametros necesarios
		nombreJugador1.setText(jugador1 + ": ");
		nombreJugador2.setText(" :" + jugador2);
		visualizaPuntuacion1.setText(String.valueOf(puntuacion1));
		visualizaPuntuacion2.setText(String.valueOf(puntuacion2));
		ponerElemento(opcionJugador1,R.drawable.interrogante);
		
		if(modoDeJuego==1){
			turno.setText("Seldon est� pensando");
			sheldon();
						
		}else{
			//Asignacion de listeners
			opcionJugador1.setOnClickListener(l);
			opcionJugador2.setOnClickListener(l);
			piedra.setOnClickListener(l);
			papel.setOnClickListener(l);
			tijeras.setOnClickListener(l);
			lagarto.setOnClickListener(l);
			spock.setOnClickListener(l);
			
			//Muestra de turno
			turno.setText("Turno de " + jugador2);
		}
		
	}
	
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		switch(keyCode){
			case KeyEvent.KEYCODE_BACK:
				toast(R.layout.toast3);
				return true;
		}
		return super.onKeyDown(keyCode, event);
	}
	
	//METODOS PARA EL HILO DE SIMULACION DE PENSAMIENTO DE SHELDON
	//Creador del control de eventos
	final Handler miHandler= new Handler();
	
	//Ultima ejecucion
	final Runnable ejecutarFin = new Runnable(){
		public void run(){
			int tirada= (int)(Math.random()*5)+1;
			Mano mano = Mano.setInt(tirada);
			ponerMano(mano, Mano.extraerImagen(mano));
		};
	};
	
	//Ejecuciones intermedias para simular movimiento
	final Runnable ejecutarMedio = new Runnable(){
		public void run(){
			int tirada= (int)(Math.random()*5)+1;
			Mano mano = Mano.setInt(tirada);
			ponerElemento(opcionJugador2,Mano.extraerImagen(mano));
		};
	};
	
	// Creacion del hilo
	protected void sheldon() {
		Thread t = new Thread() {
			public void run() {
				int i = 100;
				while (i < 1001) {
					try {
						Thread.sleep(i);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					miHandler.post(ejecutarMedio);
					i=i+100;
				}
				miHandler.post(ejecutarFin);
			}
		};
		t.start();
	}
	//FIN DE LOS METODOS
	
	//Metodo de ayuda para insertar una imagen en el boton
	private void ponerElemento(ImageView elemento,int imagen){
		Resources res = getResources();
		Drawable drawable = res.getDrawable(imagen);
		elemento.setImageDrawable(drawable);
	}
	
	//Metodo para asignar la mano y los datos necesarios
	public void ponerMano(Mano mano, int drawable){
		manoJugador2=mano;
		ponerElemento(opcionJugador2,drawable);
		lanzar();
	}
	
	//Lanza la segunda pesta�a y se mandan los datos necesarios
	public void lanzar(){
		Intent intent = new Intent(Juego2.this, Resultado.class);
		intent.putExtra("ModoDeJuego", modoDeJuego);
		intent.putExtra("jugador1", jugador1);
		intent.putExtra("jugador2", jugador2);
		intent.putExtra("puntuacion1", puntuacion1);	
		intent.putExtra("puntuacion2", puntuacion2);	
		intent.putExtra("manoJugador1", Mano.getInt(manoJugador1));
		intent.putExtra("manoJugador2", Mano.getInt(manoJugador2));
		startActivity(intent);
	}
	
	//Metodo para generar el toast personalizado
		public void toast(int layoutToast){
			LayoutInflater inflater = getLayoutInflater();
			View layout = inflater.inflate(layoutToast,null);
			Toast toast = new Toast(getApplicationContext());
			toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
			toast.setDuration(Toast.LENGTH_LONG);
			toast.setView(layout);
			toast.show(); 
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.menu, menu);
		return true;
	}
	
	public boolean onOptionsItemSelected(MenuItem item) {
	    // Handle item selection
		 Intent intent = new Intent(this,MenuRecord.class);
	   try{
	    switch (item.getItemId()) {
	    case R.id.menuReglas:            
	        startActivity(new Intent(this,MenuReglas.class));
	        break;  
	    case R.id.menuReglasGraficas:            
	        startActivity(new Intent(this,MenuReglasGraficas.class));
	        break;
	    case R.id.menuReglasVideo:            
	    	startActivity(new Intent(this,MenuReglasVideo.class));
	        break;
	    case R.id.menuInformacion:            
	        startActivity(new Intent(this,MenuInformacion.class));
	        break;
	    case R.id.menu2ficherotxt:            
	        intent.putExtra("ModoCarga", 1);
	        startActivity(intent);
	        break;
	    case R.id.menu2ficherobin:    
	    	intent.putExtra("ModoCarga", 2);
	        startActivity(intent);
	        break;
	    case R.id.menu2ficheroxml:
	    	intent.putExtra("ModoCarga", 3);
	        startActivity(intent);
	        break;
	    case R.id.menu2basesql: 
	    	intent.putExtra("ModoCarga", 4);
	        startActivity(intent);
	        break;
	    default:
	        return super.onOptionsItemSelected(item);
	    }
	   }catch(Exception e){
		   Log.i("PiedraPapelMenu", e.getMessage(), e);
	   }
	   return true;
	}

}
